const WebSocket = require('ws');
// const DateModule = require('../../db/date')


// 全局存储所有在线用户和群组
const connections = new Map(); // { userId: WebSocket }
const groups = new Map();      // { groupId: Set<userId> }

function attachWebSocket(server) {
    // 使用 noServer 选项，手动处理 upgrade 事件
    const wss = new WebSocket.Server({ noServer: true });
    
    wss.on('connection', (ws) => {
        console.log('新的链接');
        ws.on('message', async (data) => {
            let msg;
            try {
                msg = JSON.parse(data);
                console.log(msg)
            } catch (e) {
                return
            }
        })
    })

    // 处理 upgrade 事件，只处理 /chat 路径的 WebSocket 连接
    server.on('upgrade', (request, socket, head) => {
        const pathname = request.url;
        
        if (pathname === '/chat/ws') {
            wss.handleUpgrade(request, socket, head, (ws) => {
                wss.emit('connection', ws, request);
            });
        }
    });

    // wss.on('connection', (ws) => {
    //     console.log('新的链接');
    //     ws.on('message', async (data) => {
    //         let msg;
    //         try {
    //             msg = JSON.parse(data);
    //         } catch (e) {
    //             ws.send(JSON.stringify({ type: 'error', message: 'Invalid JSON' }));
    //             return;
    //         }

    //         if (msg.type === "login") {
    //             connections.set(msg.id, ws);
    //             console.log(`用户 ${msg.id} 已连接`);
    //             const memberSocket = connections.get(msg.id);
    //             // 处理离线消息
    //             const tentx = await DateModule.MessageModel.find({ id: msg.id })
    //             console.log(tentx)
    //             if (tentx.length > 0) {
    //                 for (let i = 0; i < tentx.length; i++) {
    //                     memberSocket.send(JSON.stringify({
    //                         type: 'private',
    //                         content: tentx[i].content
    //                     }))
    //                     await DateModule.MessageModel.deleteOne({_id:tentx[i]._id})
    //                 }
    //             }


    //         } else if (msg.type === "joinGroup") {
    //             const find = await DateModule.QunModel.find({ qunname: msg.qunname })
    //             find[0].Member.forEach(item => {
    //                 groups.set(item.userId, new Set());
    //                 console.log(`用户${item.userId}加入群${msg.qunname}`);
    //             })
    //             // 向群中添加用户
    //         } else if (msg.type === "group") {
    //             // 保存群消息到数据库
    //             await DateModule.BiaosModel.create({
    //                 qunname: msg.qunname,
    //                 userId: msg.userId,
    //                 content: msg.content,
    //                 time: Date.now()
    //             });

    //             // 获取群成员并广播消息
    //             const group = await DateModule.QunModel.findOne({ qunname: msg.qunname });
    //             if (group) {
    //                 group.Member.forEach(member => {
    //                     const memberSocket = connections.get(member.userId);
    //                     if (memberSocket && memberSocket.readyState === WebSocket.OPEN) {
    //                         memberSocket.send(JSON.stringify({
    //                             type: 'groupMessage',
    //                             qunname: msg.qunname,
    //                             userId: msg.userId,
    //                             content: msg.content,
    //                             time: Date.now()
    //                         }));
    //                     }
    //                 });
    //             }
    //         } else if (msg.type === "SP") {
    //             // 通话请求，转发给目标用户
    //             const targetSocket = connections.get(msg.to);
    //             if (targetSocket && targetSocket.readyState === WebSocket.OPEN) {
    //                 targetSocket.send(JSON.stringify({
    //                     type: 'SP',
    //                     from: msg.from
    //                 }));
    //             }
    //         }

    //         // 一对一私聊
    //         if (msg.type === 'private') {
    //             const targetSocket = connections.get(msg.receiverId);
    //             const user = await DateModule.userModule.findOne({ _id: msg.receiverId });
    //             console.log(`${user.username}存在`)
    //             if (targetSocket && targetSocket.readyState === WebSocket.OPEN) {
    //                 targetSocket.send(JSON.stringify(msg));
    //             } else {
    //                 console.log(`用户 ${msg.receiverId} 不在线`);
    //                 await DateModule.MessageModel.create({ id: msg.receiverId, content: msg.content, time: Date.now() })
    //             }

    //         } else if (msg.type === 'group') { // 群聊
    //             const members = groups.get(msg.targetId);
    //             members?.forEach(userId => {
    //                 const memberSocket = connections.get(userId);
    //                 if (memberSocket && memberSocket.readyState === WebSocket.OPEN) {
    //                     memberSocket.send(JSON.stringify(msg));
    //                 }
    //             });
    //         }
    //     });

    //     ws.on('error', (err) => {
    //         console.error('WebSocket 错误:', err);
    //         // 强制关闭连接（如果未自动关闭）
    //         ws.close();
    //     });

    //     ws.on('close', (code, reason) => {
    //         console.log(`用户断开连接，代码: ${code}, 原因: ${reason}`);
    //     });
    // });

    // // 广播，给所有用户发送消息
    // function broadcast(msg) {
    //     wss.clients.forEach(client => {
    //         if (client.readyState === WebSocket.OPEN) {
    //             client.send(msg);
    //         }
    //     });
    // }

    // console.log('WebSocket服务已绑定到HTTP服务器');
}


module.exports = attachWebSocket;